/* 
 * File:   Edificacion.hpp
 * Author: cesar
 *
 * Definicion de la Clase Edificacion, que representa los edificios encontrados
 * en el juego.
 *
 */

#ifndef EDIFICACION_HPP
#define	EDIFICACION_HPP

#include "ObjetoGrafico.hpp"
#include "glm.hpp"
#include "Nave.hpp"

class Edificacion : ObjetoGrafico {
public:
    /**
     * Constructor de la clase Edificacion. Esta permite generar un edificio con
     * dimensiones aleatorias
     * 
     * @param nombre_tex : El nombre de la textura.
     * @param n : Un apuntador a un objeto del tipo Nave
     * @param o : El offset o desplazamiento desde el punto inicial.
     */
    Edificacion(char *nombre_tex, Nave * n, int o);


    /**
     *  Este metodo permite dibujar la edificacion en la escena.
     */
    virtual void dibujar();


    /**
     * Metodo idle que permite realizar los calculos de movimiento y colisiones
     * del edificio.
     * 
     * @param s : El frameskip actual.
     */
    void idle(int s);
    GLfloat getProfundidad();
    void empujarEdificio(GLfloat units);


private:
    GLfloat alto; //alto del edificio
    GLfloat ancho; //ancho del edificio
    GLfloat profundidad; // profundidad en z del edificio
    GLuint textura; //identificador de la textura
    int iwidth, iheight; // ancho y alto de la textura
    unsigned char* image; // buffer para almacenar la imagen
    char * nombre_textura; // nombre de la textura
    Nave * nave; //apuntador a la nave
    int offset; // offset del edificio

    /**
     * Este metodo permite inicializar las dimensiones del edificio
     * de forma aleatoria.
     */
    void randomSize();


    /**
     * Este metodo permite colocar la edificación en una posicion aleatoria
     * en la escena.
     */
    void randomPos();

    /**
     * Este metodo permite dibujar un edificio utilizando las texturas que
     * fueran especificadas al momento de la instanciacion.
     */
    void dibujarEdificio();

    /**Este metodo permite dibujar una Edificacion sin consideras las texturas.
     * Se usa principalmente para dibujar las sombras.
     */
    void dibujarEdificio_ST();

    static int seed; //semilla para generar valores psudoaletorios

};

#endif	/* EDIFICACION_HPP */

